import { createApp } from 'vue'
import Cookies from 'js-cookie'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import locale from 'element-plus/es/locale/lang/zh-cn'
import { loadConfig, appConfig } from '@/utils/config/globalConfig'
import '@/assets/styles/index.scss' // global css

import App from './App'
import store from './store'
import router from './router'
import directive from './directive' // directive
import ECharts from 'vue-echarts'

// 注册指令
import plugins from './plugins' // plugins
import { download } from '@/utils/request'

// svg图标
import 'virtual:svg-icons-register'
import SvgIcon from '@/components/SvgIcon'
import elementIcons from '@/components/SvgIcon/svgicon'

import './permission' // 权限
import { useDict, useTreeDict } from '@/utils/dict/dict' //字典

import {
  parseTime,
  resetForm,
  getDefault30DaysRange,
  handleTree,
  selectDictLabel,
  selectDictLabels,
  filterStatus,
  getTranslatedOptions,
} from '@/utils/common'
import {
  dateAfterToday,
  dateBeforeToday,
  rowClass,
  costInput,
  getNowDate,
  formatTime,
} from '@/utils'
// 分页组件
import Pagination from '@/components/Pagination'
// 表格工具组件--列数...
import RightToolbar from '@/components/RightToolbar'
// 富文本组件
import Editor from '@/components/Editor'
// // 文件上传组件
// import FileUpload from '@/components/FileUpload'
// // 图片上传组件
// import ImageUpload from '@/components/ImageUpload'
// // 图片预览组件
// import ImagePreview from '@/components/ImagePreview'
// 自定义树选择组件
import TreeSelect from '@/components/TreeSelect'
import i18n from '@/locales/i18n'
async function init() {
  await loadConfig()
  const app = createApp(App)
  // 通过 provide/inject 共享 appConfig
  // app.provide('appConfig', appConfig)

  // 全局方法挂载
  app.config.globalProperties.useDict = useDict //字典使用
  app.config.globalProperties.useTreeDict = useTreeDict //树形字典使用
  app.config.globalProperties.selectDictLabel = selectDictLabel
  app.config.globalProperties.selectDictLabels = selectDictLabels
  app.config.globalProperties.download = download
  app.config.globalProperties.parseTime = parseTime
  app.config.globalProperties.resetForm = resetForm
  app.config.globalProperties.handleTree = handleTree
  app.config.globalProperties.getDefault30DaysRange = getDefault30DaysRange //默认三十天daterange
  app.config.globalProperties.filterStatus = filterStatus
  app.config.globalProperties.getTranslatedOptions = getTranslatedOptions //国际化选项

  app.config.globalProperties.dateAfterToday = dateAfterToday
  app.config.globalProperties.dateBeforeToday = dateBeforeToday
  app.config.globalProperties.rowClass = rowClass //高亮
  app.config.globalProperties.costInput = costInput
  app.config.globalProperties.getNowDate = getNowDate //获取当天年月日
  app.config.globalProperties.formatTime = formatTime //获取日期

  // 全局组件挂载

  app.component('Pagination', Pagination)
  app.component('TreeSelect', TreeSelect)
  // app.component('FileUpload', FileUpload)
  // app.component('ImageUpload', ImageUpload)
  // app.component('ImagePreview', ImagePreview)
  app.component('RightToolbar', RightToolbar)
  app.component('Editor', Editor)
  app.component('v-chart', ECharts)
  app.component('svg-icon', SvgIcon)

  app.use(router)
  app.use(store)
  app.use(plugins)
  app.use(elementIcons)
  app.use(i18n)

  directive(app)

  // 使用element-plus 并且设置全局的大小
  app.use(ElementPlus, {
    locale: locale,
    // 支持 large、default、small
    size: Cookies.get('size') || 'default',
  })

  app.mount('#app')
}
init()
